using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SIOGDE.AccesoDatos.Entidades;
using SIOGDE.AccesoDatos.Contratos;
using SIOGDE.Negocios.Servicios;
using SIOGDE.Negocios.Excepciones;

namespace SIOGDE.Negocios
{
   /// <summary>
   /// Implementacion de la interface IHistorialAscensoNegociosServicio, los metodos que estan definidos en el contrato IHistorialAscensoNegociosServicio serán accesibles desde un contexto externo
   /// </summary>	
   public class HistorialAscensoNegocios : IHistorialAscensoNegociosServicio
   {
	private IHistorialAscensoAccesoDatos accesoDatos;
	public HistorialAscensoNegocios()
	{		
		accesoDatos = DataFactory.Current.GetHistorialAscensoAccesoDatos();
	}
	
	/// <summary>
    /// Devuelve una lista de HistorialAscenso's de las ocurrencias encontradas a partir del filtro
    /// </summary>    
	public List<HistorialAscenso> BuscarPorFiltro(string filtro)
	{
		return accesoDatos.BuscarPorFiltro(filtro).ToList();
	}

	#region operaciones básicas
	
	/// <summary>
    /// Elimina la entidad HistorialAscenso, lanzará una excepcion si la entidad guarda dependencia a otras entidades
    /// </summary>	
	public void Eliminar(HistorialAscenso entidad)
	{
		try
		{
		    accesoDatos.Delete(accesoDatos.GetById(entidad.Id));
	    }
		catch(Exception ex)
		{
		   throw new HistorialAscensoEliminarExcepcion("HistorialAscenso");
		}
	}
	
	/// <summary>
    /// Devuelve HistorialAscenso, buscada por su Id, si no existe, entonces devuelve null
    /// </summary>	
	public HistorialAscenso ObtenerPorId(object Id)
	{
		return accesoDatos.GetById(Id);
	}

	/// <summary>
    /// Devuelve List<HistorialAscenso>, de todas la entidades de ese tipo
    /// </summary>	
	public List<HistorialAscenso> ObtenerTodas()
	{
		return accesoDatos.GetAll().ToList();
	}

	
	/// <summary>
    /// Guarda HistorialAscenso, previa ejecucion satisfactoria de las reglas de negocio
    /// </summary>	
	public HistorialAscenso Guardar(HistorialAscenso entidad)
	{
		//Agregar aqui las reglas de negocio.......	
		if(entidad==null)
		 throw new HistorialAscensoRequeridoExcepcion();

        if (entidad.GradoId_FK == 0 && entidad.Grado == null)
            throw new Exception("Grado no puede ser nulo");

		#region Foreign Keys Values
        if(entidad.GradoId_FK > 0 && entidad.Grado==null)
            entidad.Grado = DataFactory.Current.GetGradoAccesoDatos().GetById(entidad.GradoId_FK);
        if(entidad.PersonaId_FK > 0 && entidad.Persona==null)
            entidad.Persona = DataFactory.Current.GetPersonaAccesoDatos().GetById(entidad.PersonaId_FK);
        #endregion

        if (string.IsNullOrEmpty(entidad.Guid))
            entidad.Guid = System.Guid.NewGuid().ToString();

        entidad.RegistradoPor = SIOGDE.Negocios.Global.Session.UserInfo.Nombre;
        entidad.FechaRegistro = DateTime.Now;



		if (entidad.Id == 0)
			accesoDatos.Insert(entidad);
		else
			accesoDatos.Update(entidad);

		return entidad;
	}

	#endregion

    public List<HistorialAscenso> GetPorPersonaGuid(string guid)
    {
        return accesoDatos.GetPorPersonaGuid(guid).ToList();
    }

    public List<HistorialAscenso> GetPorPersonaId(int personaId)
    { 
      return  accesoDatos.GetPorPersonaId(personaId).ToList();
    }

   }
}


